home *** CD-ROM | disk | FTP | other *** search
/ Delphi Anthology / aDELPHI.iso / Runimage / Delphi50 / Source / Decision Cube / mxqedcom.pas < prev    next >
Pascal/Delphi Source File  |  1999-08-11  |  13KB  |  253 lines

  1. {*******************************************************}
  2. {                                                       }
  3. {       Borland Delphi Visual Component Library         }
  4. {                                                       }
  5. {       Copyright (c) 1997,99 Inprise Corporation       }
  6. {                                                       }
  7. {*******************************************************}
  8.  
  9. { BDE Query Edit COM API  }
  10.  
  11. unit mxqedcom;
  12.  
  13. interface
  14.  
  15. uses
  16.   Windows, BDE, ActiveX, ComObj, WinTypes, WinProcs;
  17.  
  18. const
  19.   CLSID_IDSQL32: TGUID = (
  20.       D1:  $FB99D700;
  21.       D2:  $18B9;
  22.       D3:  $11D0;
  23.       D4:  ($a4, $cf, $0, $a0, $24, $c9, $19, $36));
  24.  
  25.   IID_IQStmt: TGUID = (
  26.       D1:  $FB99D701;
  27.       D2:  $18B9;
  28.       D3:  $11D0;
  29.       D4:  ($a4, $cf, $0, $a0, $24, $c9, $19, $36));
  30.  
  31.  
  32. type
  33.    UINT16 = Word;  { unsigned 16-bit }
  34.    pUINT16 = ^UINT16;
  35.    UINT32 = Cardinal;  { unsigned 32-bit }
  36.    pVOID = Pointer;
  37.  
  38.   StmtType = (sTypeSelect, sTypeInsert, sTypeDelete, sTypeUpdate, sTypeDDL);
  39.  
  40.   { Enumerates the types of join }
  41.   JoinType =  (joinNone, joinInner, joinLeft, joinRight, joinFull);
  42.  
  43.   {$Z4}
  44.   QNodeType = (qnodeNA, qnodeAdd, qnodeAvg, qnodeCount, qnodeMax, qnodeMin, qnodeTotal,
  45.                qnodeAlias, qnodeAnd, qnodeConstant, qnodeDivide, qnodeEqual,
  46.                qnodeField, qnodeGreaterEq, qnodeGreater, qnodeLessEq, qnodeLike,
  47.                qnodeLess, qnodeMultiply, qnodeNotEqual, qnodeNot, qnodeOr, qnodeSubtract,
  48.                qnodeColumn, qnodeCast, qnodeAssign, qnodeIsNull, qnodeExists, qnodeVariable,
  49.                qnodeSelect, qnodeNegate, qnodeUdf, qnodeIN, qnodeANY, qnodeALL, qnodeTrim,
  50.                qnodeLower, qnodeUpper, qnodeSubstring, qnodeList, qnodeExtract, qnodeCorrVar,
  51.                qnodeTrue, qnodeNotAnd, qnodeNotOr, qnodeUnknown, qnodeConcatenate,
  52.                qnodeGetDateTime);
  53.  
  54.   pIExpr      = ^IExpr;
  55.   pIField     = ^IField;
  56.   pITable     = ^ITable;
  57.   pIProjector = ^IProjector;
  58.   pIOrderBy   = ^IOrderBy;
  59.   pIGroupBy   = ^IGroupBy;
  60.   pIJoinExpr  = ^IJoinExpr;
  61.   pIJoin      = ^IJoin;
  62.   pIQStmt     = ^IQStmt;
  63.  
  64.   ExprCat = (exprCatWhere, exprCatHaving);
  65.  
  66.   dialect_ansi = (DIALECT, ANSI, DIALECTANSI);
  67.  
  68.   { When an input table is deleted, all related items are deleted. }
  69.   DeletedObj = record
  70.     iNumProjector,
  71.     iNumWhere,
  72.     iNumJoin,
  73.     iNumGroupBy,
  74.     iNumHaving,
  75.     iNumOrderBy: UINT16;
  76.     pProjector: pIProjector;
  77.     pWhere: pIExpr;
  78.     pJoin: pIJoin;
  79.     pGroupBy: pIGroupBy;
  80.     pHaving: pIExpr;
  81.     pOrderBy: pIOrderBy;   
  82.   end;
  83.  
  84.  
  85.   pDeletedObj = ^DeletedObj;
  86.   ppDeletedObj = ^pDeletedObj;
  87.     
  88.   IField = class;
  89.   IExpr = class;
  90.      
  91.   ITable = class(TObject)
  92.   public
  93.     function GetName(var Name: PChar): DBIResult; virtual; stdcall; abstract;
  94.     function GetDbName(var DbName: PChar): DBIResult; virtual; stdcall; abstract;
  95.     function GetDrvType(var DrvType: PChar): DBIResult; virtual; stdcall; abstract;
  96.     function GetAlias(var Alias: PChar): DBIResult; virtual; stdcall; abstract;
  97.     function FetchField(FldIndex: UINT16; var pField: IField): DBIResult; virtual; stdcall; abstract;
  98.   end;
  99.  
  100.   IProjector = class(TObject)
  101.   public
  102.     function GetQualifier(var Qualifier: PChar): DBIResult; virtual; stdcall; abstract;
  103.     function GetName(var Name: PChar): DBIResult; virtual; stdcall; abstract;
  104.     function GetIsAliased(var IsAliased: LongBool): DBIResult; virtual; stdcall; abstract;
  105.     {
  106.       When the projector is a simple field or an aggregate of a simple field,
  107.         GetBaseName gets the field name.
  108.       else
  109.         GetBaseName gets NULL.
  110.     }
  111.     function GetBaseName(var BaseName: PChar): DBIResult; virtual; stdcall; abstract;
  112.     function FetchExpr(var ppExpr: IExpr): DBIResult; virtual; stdcall; abstract;
  113.   end;
  114.  
  115.   IGroupBy = class(TObject)
  116.   public
  117.     function FetchField(var ppField: IField): DBIResult; virtual; stdcall; abstract;
  118.   end;
  119.  
  120.   IOrderBy = class(TObject)
  121.   public
  122.     function GetPosition(var Position: UINT16): DBIResult; virtual; stdcall; abstract;
  123.     function GetIsDescend(var IsDescend: LongBool): DBIResult; virtual; stdcall; abstract;
  124.     function ChangeDescend(bDescend: LongBool): DBIResult; virtual; stdcall; abstract;
  125.     function FetchProjector(var ppProjector: IProjector): DBIResult; virtual; stdcall; abstract;
  126.   end;
  127.  
  128.   IField = class(TObject)
  129.   public
  130.     function GetName(var ppFldName: PChar): DBIResult; virtual; stdcall; abstract;
  131.     function FetchTable(var ppTable: ITable): DBIResult; virtual; stdcall; abstract;
  132.     function GetDataType(var iFldType: UINT16; var iSubType: UINT16): DBIResult; virtual; stdcall; abstract;
  133.     function GetTable_Field(var Tbl_Fld: PChar): DBIResult; virtual; stdcall; abstract;
  134.   end;
  135.  
  136.   IExpr = class(TObject)
  137.   public
  138.     function GetNodeType(var nodeType: QNodeType): DBIResult; virtual; stdcall; abstract;
  139.     function GetNumbSubExprs(var number: UINT16): DBIResult; virtual; stdcall; abstract;
  140.     function GetSQLText(var ppSQLText: PChar): DBIResult; virtual; stdcall; abstract;
  141.     function FetchSubExpr(number:UINT16; var ppExpr:IExpr): DBIResult; virtual; stdcall; abstract;
  142.     function AddSubExpr_Text(sqlText: PChar; var pObj: IExpr; pBefThisObj: IExpr): DBIResult; virtual; stdcall; abstract;
  143.     function AddSubExpr_node(qNodeType: QNodeType; var pObj: IExpr; pBefThisObj: IExpr): DBIResult; virtual; stdcall; abstract;
  144.     function AddSubExpr_field(pField: IField; var pObj: IExpr; pBefThisObj: pIExpr): DBIResult; virtual; stdcall; abstract;
  145.     function ChangeNodeType(nodeType: QNodeType): DBIResult; virtual; stdcall; abstract;
  146.     function DeleteSubExpr(pObj : IExpr): DBIResult; virtual; stdcall; abstract;
  147.     function MoveSubExpr(pObj, pBefThisObj: IExpr): DBIResult; virtual; stdcall; abstract;
  148.     function GetParentExpr(pRootExpr: IExpr; var ppParentExpr: IExpr; var ppNextSiblingExpr: IExpr): DBIResult; virtual; stdcall; abstract;
  149.     function GetNumCells(var nCells : UINT16): DBIResult; virtual; stdcall; abstract;
  150.     function GetCell(index : UINT16; var ppCell: IExpr; var ppText1: PChar; var ppText2: PChar): DBIResult; virtual; stdcall; abstract;
  151.     { Only when it's a field node. }
  152.     function FetchField(var ppField: IField): DBIResult; virtual; stdcall; abstract;
  153.   end;
  154.  
  155.   IJoinExpr = class(IExpr)
  156.   public
  157.     function FetchFieldLeft(var ppField: IField): DBIResult; virtual; stdcall; abstract;
  158.     function FetchFieldRight(var ppField: IField): DBIResult; virtual; stdcall; abstract;
  159.   end;
  160.  
  161.   IJoin = class(TObject)
  162.   public
  163.     function FetchTableLeft(var ppTable: ITable): DBIResult; virtual; stdcall; abstract;
  164.     function FetchTableRight(var ppTable: ITable): DBIResult; virtual; stdcall; abstract;
  165.     function GetJoinType(var joinType: JoinType): DBIResult; virtual; stdcall; abstract;
  166.     function GetNumExprs(var number: UINT16): DBIResult; virtual; stdcall; abstract;
  167.     function GetSQLText(var ppSQLText: PChar): DBIResult; virtual; stdcall; abstract;
  168.     function FetchJoinExpr(number: UINT16; var ppExpr: IExpr): DBIResult; virtual; stdcall; abstract;
  169.     function GetIndexForJoinExpr(pJoinExpr: IJoinExpr; var index: UINT16): DBIResult; virtual; stdcall; abstract;
  170.     function AddJoinExpr(FldNumLeft: UINT16; FldNumRight: UINT16; MathOp: QNodetype;
  171.                          var ppObj: IExpr; pBefThisObj: IExpr): DBIResult; virtual; stdcall; abstract;
  172.     function AddJoinExpr_useFldName(FldNameLeft: PChar; FldNameRight: PChar; MathOp: QNodetype;
  173.                                     var ppObj: IExpr; pBefThisObj: IExpr): DBIResult; virtual; stdcall; abstract;
  174.     function DeleteJoinExpr(pObj: IExpr): DBIResult; virtual; stdcall; abstract;
  175.     function ChangeJoinType(JoinType_input: JoinType): DBIResult; virtual; stdcall; abstract;
  176.   end;
  177.  
  178.   IQStmt = interface(IUnknown)
  179.     function Initialize(hDb: hDBIDb; pszQuery: PChar): DBIResult; stdcall;
  180.     function GetStmtType(var stmtType: StmtType): DBIResult; stdcall;
  181.     function GetNumInputTables(var Num: UINT16): DBIResult; stdcall;
  182.     function GetNumProjectors(var Num: UINT16): DBIResult; stdcall;
  183.     function GetNumGroupBy(var Num: UINT16): DBIResult; stdcall;
  184.     function GetNumOrderBy(var Num: UINT16): DBIResult; stdcall;
  185.     function GetNumJoins(var Num: UINT16): DBIResult; stdcall;
  186.     function GetHasWherePred(var Has: LongBool): DBIResult; stdcall;
  187.     function GetHasHavingPred(var Has: LongBool): DBIResult; stdcall;
  188.     function GetIsDistinct(var IsDistinct: LongBool): DBIResult; stdcall;
  189.     function SetDistinct(IsDistinct: LongBool): DBIResult; stdcall;
  190.     function GetSQLText(var sqlText: PChar; var DialectDrvType: UINT32; 
  191.                         bInnerJoinUseKeyword: LongBool; lang: dialect_ansi): DBIResult; stdcall;
  192.     function FetchInputTable(index: UINT16; var pTable: ITable): DBIResult; stdcall;
  193.     function FetchProjector(index: UINT16; var pProjector: IProjector): DBIResult; stdcall;
  194.     function FetchGroupBy(index: UINT16; var pGroupBy: IGroupBy): DBIResult; stdcall;
  195.     function FetchOrderBy(index: UINT16; var pOrderBy: IOrderBy): DBIResult; stdcall;
  196.     function FetchJoin(index: UINT16; var pJoin: IJoin): DBIResult; stdcall;
  197.     function FetchWhereExpr(var Expr: IExpr): DBIResult; stdcall;
  198.     function FetchHavingExpr(var Expr: IExpr): DBIResult; stdcall;
  199.     function GetIndexForInputTable(pObj: ITable; var index:UINT16): DBIResult; stdcall;
  200.     function GetIndexForJoin(pObj: IJoin; var index:UINT16): DBIResult;stdcall;
  201.     function GetIndexForProjector(pObj: IProjector; var index:UINT16): DBIResult; stdcall;
  202.     function GetIndexForGroupBy(pObj: IGroupBy; var index:UINT16): DBIResult; stdcall;
  203.     function GetIndexForOrderBy(pObj: IOrderBy; var index:UINT16): DBIResult; stdcall;
  204.     function AddInputTable(Name: PChar; DbName: PChar; DrvType: PChar; Alias: PChar;
  205.                            var pObj: ITable; BefThisObj: ITable): DBIResult; stdcall;
  206.     function DeleteInputTable(Table: ITable; var pDelObj: pDeletedObj): DBIResult; stdcall;
  207.     function AddJoin(TableLeft: ITable; TableRight: ITable; eJoinType: JoinType;
  208.                      var pObj: IJoin; BefThisObj: IJoin): DBIResult; stdcall;
  209.     function DeleteJoin(Obj: IJoin): DBIResult; stdcall;
  210.     function AddProjector_FldNum(Table: ITable; FldSeqNum: UINT16; var pObj: IProjector;
  211.                                  BefThisObj: IProjector; bAddGroupBY: LongBool): DBIResult; stdcall;
  212.     function AddProjector_field(Field: IField; var pObj: IProjector; BefThisObj: IProjector;
  213.                                 bAddGroupBY: LongBool): DBIResult; stdcall;
  214.     function AddProjector_text(sqlText: PChar; var pObj: IProjector; BefThisObj: IProjector): DBIResult; stdcall;
  215.     function AddProjector_node(qNodeType: QNodeType; var pObj: IProjector;
  216.                                BefThisObj: IProjector; bAddGroupBy: LongBool): DBIResult; stdcall;
  217.     function DeleteProjector(pObj: IProjector; var pDelObj: pDeletedObj): DBIResult; stdcall;
  218.  
  219.     { Create a default projector name for the input projector }
  220.     function GenerateDefProjName(Proj: IProjector): DBIResult; stdcall;
  221.     {
  222.      If the input sqlText is a field, the format is qualifier.fieldName.
  223.      Note: If the qualifier need to be quoted (e.g. contains special character,
  224.            or keyword, or all numbers), it should be quoted in sqlText.
  225.      If it is field, *ppField points to the field. Otherwise *ppField is NULL.
  226.     }
  227.     function IsField(sqlText: PChar; var pField: IField): DBIResult; stdcall;
  228.     function AddGroupBy_FieldNo(pTable: ITable; FldIndex: UINT16; var pObj: IGroupBy;
  229.                                 pBefThisObj: IGroupBy): DBIResult; stdcall;
  230.     function AddGroupBy_Field(pField: IField; var pObj: IGroupBy; pBefThisObj: IGroupBy): DBIResult; stdcall;
  231.     function DeleteGroupBy(pObj: IGroupBy): DBIResult; stdcall;
  232.     function AddGroupBy_automatic: DBIResult; stdcall;
  233.     function AddOrderBy(pProjector: IProjector; iPosition: UINT16; bDesc: BOOL;
  234.                         var pObj: IOrderBy; pBefThisObj: IOrderBy): DBIResult; stdcall;
  235.     function DeleteOrderBy(pObj: IOrderBy): DBIResult; stdcall;
  236.     function SetTableAlias(pTable: ITable; newAlias: PChar): DBIResult; stdcall;
  237.     function SetProjectorName(pProj: IProjector; newName: PChar): DBIResult; stdcall;
  238.     function MoveProjector(pObj, pBefThisObj: IProjector): DBIResult; stdcall;
  239.     function MoveTable(pObj, pBefThisObj: ITable): DBIResult; stdcall;
  240.     function MoveGroupBy(pObj, pBefThisObj: IGroupBy): DBIResult; stdcall;
  241.     function MoveOrderBy(pObj, pBefThisObj: IOrderBy): DBIResult; stdcall;
  242.     function MakeComment(pComment: PChar; bFront: LongBool): DBIResult; stdcall;
  243.     function ExprTextToObj(var pExpr: IExpr; ec: ExprCat; rootExpr: IExpr): DBIResult; stdcall;
  244.     function ExprObjToText(var pExpr: IExpr; rootExpr: IExpr): DBIResult; stdcall;
  245.     function ProjTextToObj(pProj: IProjector): DBIResult; stdcall;
  246.     function ProjObjToText(pProj: IProjector): DBIResult; stdcall;
  247. end;
  248.  
  249. implementation
  250.  
  251. end.
  252.  
  253.